//package com.example.apigateway.filter;
//
//import com.example.apigateway.constant.CookieConstant;
//import com.example.apigateway.constant.RedisConstant;
//import com.example.apigateway.util.CookieUtil;
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import com.netflix.zuul.exception.ZuulException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.http.HttpStatus;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
//import javax.servlet.http.Cookie;
//import javax.servlet.http.HttpServletRequest;
//
//import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVLET_DETECTION_FILTER_ORDER;
//
///**
// * 权限拦截
// */
//@Component
//public class AuthFilter extends ZuulFilter {
//
//    @Autowired
//    private StringRedisTemplate stringRedisTemplate;
//    /**
//     * 前置过滤器
//     * @return
//     */
//    @Override
//    public String filterType() {
//        return FilterConstants.PRE_TYPE;
//    }
//
//    /**
//     * 越小，优先级越高
//     * @return
//     */
//    @Override
//    public int filterOrder() {
//        return SERVLET_DETECTION_FILTER_ORDER-1;
//    }
//
//    @Override
//    public boolean shouldFilter() {
//        return true;
//    }
//
//    @Override
//    public Object run() throws ZuulException {
//        RequestContext currentContext = RequestContext.getCurrentContext();
//        HttpServletRequest request = currentContext.getRequest();
//
//        /**
//         * /order/create 只能买家访问
//         * /order/finish 只能卖家访问
//         * /product/list 都可以访问
//         */
//        String uri = request.getRequestURI();
//        if("/order/order/create".equals(uri)){
//            Cookie cookie = CookieUtil.get(request, CookieConstant.OPENID);
//            if(cookie==null||StringUtils.isEmpty(cookie.getValue())){
//            currentContext.setSendZuulResponse(false);
//            currentContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());//权限不足
//            }
//        }
//        if("/order/order/finish".equals(uri)){
//            Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN);
//            String redis = stringRedisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_TEMPLATE, cookie.getValue()));
//            if(cookie==null||StringUtils.isEmpty(cookie.getValue())
//                    ||StringUtils.isEmpty(redis )){
//            currentContext.setSendZuulResponse(false);
//            currentContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());//权限不足
//            }
//        }
//
//        return null;
//    }
//}
